The present invention relates generally to a distributed data processing method for application software, and more particularly, but not by way of limitation, to a system, method, and computer program product for distributing processes for computation beyond the limits of their virtual address spaces by offloading their in-memory components across nodes.
Most cloud computing systems rely on hardware virtualization to emulate the behavior of one or another off-the-shelf platform, often on heterogeneous real hardware. A drawback of this virtual machine (“VM”) based approach is the waste of resources entailed by replication of software components from VM to VM. When different applications running on different VMs share the resources of a cloud or other distributed computing environment, each of them requires its own services, device drivers, shared libraries, etc. It would be advantageous for all such components to be reusable and shared by all the applications that run in a cloud system.
Typically, the various components accessible by a distributed operating system reside within a cluster of nodes. However, the conventional techniques for distributed operating systems do not provide for off-the-shelf software to be distributed onto such a system, but rather limit any software designed without distributed computing in mind to execute only on a single computing node within the distributed computing environment. To date, distributed operating systems do not at all lend themselves to running ordinary software in a distributed manner because of drawbacks in the various techniques.
There is a need in the art for a system that allows off-the-shelf software, intended for execution on a conventional operating system, to be distributed across nodes without requiring a special rebuild or version. Further, there is a need for application software and/or services to be able to invoke components that run on various nodes, in order to achieve fairly balanced component deployment across nodes and to avoid duplicative component deployments from node to node, all without the application software or services necessarily being aware that they are running on a distributed system. If such a system were made available, software could then be tested bringing all the tools and techniques usable on conventional operating systems to bear. Ordinary software could then be distributed within a cloud computing environment in a more highly scalable manner than can be achieved via conventional hardware virtualization alone.